/**
 *  \file   main.c
 *  \brief  Définitions de tous les timers et les fonction permettant de les manipuler
 *  \author Miora ANDRIAMANOHARISOA, Loic MINGHETTI
 *  \date   PFE 2011
 **/

#include "include.h"

#define TIMER_PERIOD_MS 10 
#define ID_INPUT_TIMEOUT_SECONDS 10
#define ID_INPUT_TIMEOUT_TICKS (ID_INPUT_TIMEOUT_SECONDS*1000/TIMER_PERIOD_MS)
#define SLOT_PERIOD 29
#define ANTIBOUNCING_DURATION 10

/* tableau de timers */
#define NB_TIMERS 5
uint16_t timer[NB_TIMERS];
#define TIMER_ANTIBOUNCING timer[0]
#define TIMER_TEMPERATURE_CAPTURE timer[1]
#define TIMER_AWAKE_INTERVAL timer[2]
#define TIMER_ACTION timer[3]
#define TIMER_TEST timer[4]

/* Timer pour la gestion des dérives d'horloges */ 
#define CLOCK_GAP_PA1_MAX 170 
#define CLOCK_GAP_PA2_MAX 60
#define SECURITY_MARGIN 20
 
/* les timeouts sont les valeurs d'horloges pour lesquels les threads sont appelés à lancer une action   */
#define temperature_capture_timeout 1000
#define snd_rcv_timeout 1000             
#define preambule_timeout 24 
#define ack_data_timeout 400
#define awoken_timeout 50 
#define scan_timeout 900 

int backoff_timeout;  

/* Fonction de call back appelé à chaque fois que le ticks de l'horloge est atteint. Il implémente de 1 toutes les valeurs contenues dans le tableau timer */
void timer_tick_cb() {
    int i;
    for(i = 0; i < NB_TIMERS; i++)
    {
        if(timer[i] != UINT_MAX) {
            timer[i]++;
        }
    }
}


int timer_reached(uint16_t timer, uint16_t count) {
    return (timer >= count);
}

int timer_not_reached(uint16_t timer, uint16_t count){
  return (timer < count);
}
